Java Technologies Serialization এবং Deserialization এ unknown properties manage করা গাইড ও নোট

313

Jackson দিয়ে Serialization এবং Deserialization করার সময় unknown properties সমস্যা হতে পারে, বিশেষত যখন JSON ডেটার ফিল্ড নাম Java ক্লাসের ফিল্ড নামের সঙ্গে মেলে না। এই সমস্যা ব্যবস্থাপনার জন্য Jackson বিভিন্ন উপায় প্রদান করে।

Unknown Properties এর সমস্যা

যখন একটি JSON ফাইল Java ক্লাসের ফিল্ডের বাইরে অতিরিক্ত প্রোপার্টি থাকে, তখন Jackson ডিফল্টভাবে UnrecognizedPropertyException তৈরি করবে।

উদাহরণ:

{
    "id": 1,
    "name": "Rahim",
    "email": "rahim@example.com",
    "unknown_field": "extra_value"
}

এখন, যদি unknown_field আপনার Java ক্লাসে না থাকে, তাহলে Jackson UnrecognizedPropertyException তৈরি করবে।

Jackson-এ Unknown Properties Manage করার কৌশল

Jackson-এ unknown properties হ্যান্ডেল করার জন্য কিছু জনপ্রিয় কৌশল রয়েছে। নিচে সেগুলোর বিশদ আলোচনা করা হলো।


1. @JsonIgnoreProperties ব্যবহার করা

@JsonIgnoreProperties অ্যানোটেশন Jackson-এ unknown properties উপেক্ষা করতে ব্যবহৃত হয়। এটি JSON ডেসিরিয়ালাইজ করার সময় অতিরিক্ত প্রোপার্টি উপেক্ষা করে, এবং কোন exception তৈরি হয় না।

ব্যবহার:

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public class User {
    private int id;
    private String name;

    // Getters and Setters
}

এখানে, ignoreUnknown = true সেট করা হলে, JSON-এ যদি কোনো অতিরিক্ত ফিল্ড থাকে, তা উপেক্ষা করা হবে এবং UnrecognizedPropertyException তৈরি হবে না।

Deserialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonIgnorePropertiesExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"Rahim\",\"unknown_field\":\"extra_value\"}";

        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);

        System.out.println("ID: " + user.getId());
        System.out.println("Name: " + user.getName());
    }
}
Output:
ID: 1
Name: Rahim

এখানে unknown_field JSON ডেটা উপেক্ষা করা হয়েছে, এবং কোনো exception ছাড়াই ডেসিরিয়ালাইজেশন সম্পন্ন হয়েছে।


2. ObjectMapper Configuration দিয়ে Unknown Properties উপেক্ষা করা

ObjectMapper ব্যবহার করার সময়, FAIL_ON_UNKNOWN_PROPERTIES কনফিগারেশনটি বন্ধ করে unknown properties উপেক্ষা করা যায়।

ব্যবহার:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.DeserializationFeature;

public class ObjectMapperConfigExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"Rahim\",\"unknown_field\":\"extra_value\"}";

        ObjectMapper mapper = new ObjectMapper();
        // Disable FAIL_ON_UNKNOWN_PROPERTIES
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

        User user = mapper.readValue(json, User.class);

        System.out.println("ID: " + user.getId());
        System.out.println("Name: " + user.getName());
    }
}

Output:

ID: 1
Name: Rahim

এখানে, FAIL_ON_UNKNOWN_PROPERTIES ফিচারটি false সেট করা হয়েছে, যার ফলে unknown properties উপেক্ষা করা হয়েছে এবং কোনো exception তৈরি হয়নি।


3. @JsonAnySetter ব্যবহার করা

Jackson @JsonAnySetter অ্যানোটেশনটি ব্যবহার করা যেতে পারে, যা একটি map বা collection ফিল্ডে JSON-এ থাকা unknown properties সংরক্ষণ করতে সক্ষম। এটি আপনি যখন জানেন যে কিছু অতিরিক্ত প্রোপার্টি থাকবে, তবে সেগুলো Dynamic ভাবে Map বা List এ সংগ্রহ করতে পারেন।

ব্যবহার:

import com.fasterxml.jackson.annotation.JsonAnySetter;
import java.util.HashMap;
import java.util.Map;

public class User {
    private int id;
    private String name;
    private Map<String, Object> additionalProperties = new HashMap<>();

    @JsonAnySetter
    public void setAdditionalProperties(String key, Object value) {
        this.additionalProperties.put(key, value);
    }

    // Getters and Setters
}

Deserialization Example:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonAnySetterExample {
    public static void main(String[] args) throws Exception {
        String json = "{\"id\":1,\"name\":\"Rahim\",\"unknown_field\":\"extra_value\"}";

        ObjectMapper mapper = new ObjectMapper();
        User user = mapper.readValue(json, User.class);

        System.out.println("ID: " + user.getId());
        System.out.println("Name: " + user.getName());
        System.out.println("Additional Properties: " + user.getAdditionalProperties());
    }
}

Output:

ID: 1
Name: Rahim
Additional Properties: {unknown_field=extra_value}

এখানে @JsonAnySetter ব্যবহার করে unknown field unknown_field Dynamic ভাবে additionalProperties মেপে যোগ করা হয়েছে।


4. @JsonIgnore ব্যবহার করা

Jackson-এ @JsonIgnore অ্যানোটেশন ব্যবহার করে একটি নির্দিষ্ট ফিল্ডকে Serialization এবং Deserialization থেকে বাদ দেওয়া যায়। যদি আপনার কোনো ফিল্ডকে সম্পূর্ণভাবে অগ্রাহ্য করতে চান, তাহলে এটি ব্যবহার করতে পারেন।

ব্যবহার:

import com.fasterxml.jackson.annotation.JsonIgnore;

public class User {
    private int id;
    private String name;

    @JsonIgnore
    private String email; // This field will be ignored in both serialization and deserialization

    // Getters and Setters
}

5. @JsonDeserialize@JsonSerialize এর মাধ্যমে কাস্টম ডেসিরিয়ালাইজেশন হ্যান্ডলিং

আপনি Custom Deserializer তৈরি করে বিশেষ কিছু unknown properties হ্যান্ডেল করতে পারেন। এটি তখন প্রয়োজনীয় হতে পারে যখন আপনার ডেটাতে কিছু প্রপার্টি থাকে যা আগেই ডিফাইন করা হয়নি এবং সেগুলোর জন্য বিশেষভাবে ডেসিরিয়ালাইজার প্রয়োগ করতে হয়।

ব্যবহার:

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;

public class User {
    private int id;
    private String name;

    @JsonDeserialize(using = CustomUnknownPropertyDeserializer.class)
    private String unknownProperty;

    // Getters and Setters
}

  1. @JsonIgnoreProperties: JSON থেকে অতিরিক্ত বা unknown ফিল্ডগুলোকে উপেক্ষা করার জন্য ব্যবহার করা হয়।
  2. FAIL_ON_UNKNOWN_PROPERTIES: ObjectMapper কনফিগারেশনের মাধ্যমে unknown properties উপেক্ষা করা যায়।
  3. @JsonAnySetter: JSON-এর unknown properties ম্যানেজ করার জন্য একটি Map বা Collection ফিল্ডে যুক্ত করার সুযোগ দেয়।
  4. @JsonIgnore: নির্দিষ্ট ফিল্ডগুলোর উপেক্ষা করার জন্য ব্যবহার করা হয়।

এভাবে Jackson-এ unknown properties manage করার জন্য বিভিন্ন টেকনিক ব্যবহার করা যায়, যা আপনার JSON ডেসিরিয়ালাইজেশন প্রক্রিয়াকে আরো নমনীয় এবং শক্তিশালী করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...